package dxc03;

public class MyRunnable implements Runnable {
    int tickets = 0;

    //不需要加static，因为我们采用第二种方式实现多线程，第二种方式是创建一个类MyRunnable实现Runnable接口
        //MyRunnable mr = new MyRunnable(); 只需要创建一次
    @Override
    public void run() {
        //1.循环
        while (true) {
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //采用同步方法来写
            if (method()) {

                break;
            }
        }
    }


    /*
    方法是非静态的  锁对象就要用this修饰 ，这个this就是我们在测试类中创建的MyRunnable mr = new MyRunnable();
    这个对象是用来表示多线程要执行的任务的
     */
    private synchronized boolean method() {

        //2.同步代码块
        synchronized (MyRunnable.class) {
            if (tickets == 100) {
                //3.判断共享数据是否到了末尾，如果到了末尾
                return true;
            } else {
                //4.判断共享数据到了是否末尾，如果没有到末尾

                tickets++;
                System.out.println(Thread.currentThread().getName() + "再卖票：" + tickets + "张票");

            }
        }
        return false;
    }
}
